Admin Navigation
Hệ thống Menu Sidebar của Admin SkillDo CMS cho phép bạn thêm các Mục Điều Hướng (Navigation Items) vô cùng dễ dàng mà không cần phải can thiệp sửa trực tiếp vào file View HTML Layout của Core CMS. Bạn chỉ việc gọi hàm cấu hình bằng Hook Action, CMS sẽ tự động đọc mảng và in Menu trên giao diện Quản Trị của bạn.
1. Cơ Chế Hoạt Động Của Menu Admin
Admin Sidebar trong SkillDo được tạo lên từ class thư viện SkillDo\Cms\Menu\AdminMenu. Hệ thống nhận yêu cầu tạo menu thông qua Hook Action admin_navigation.
Luồng chạy:
- Khi có request duyệt
domain.com/admin. - Hệ thống gọi Action
admin_navigationđể cho phép TẤT CẢ các Plugin/Theme/Packages đăng ký Menu ảo vào bộ nhớ. - Sau đó
AdminMenu->render()gọi view và đổ giao diện ra màn hình HTML Sidebar.
2. Việc sử dụng Hook Để Thêm Menu Gốc (Top-Level Menu)
Hàm dùng để thêm một menu lớn bên ngoài Sidebar (Menu cấp 1) là AdminMenu::add($id, $title, $url, $capabilities, $icon) hoặc Gọi động cấu trúc Mảng.
Để gọi nó an toàn, bạn nên sử dụng Hook đăng ký ở Service Provider của Plugin/Module hoặc app/helpers.php (Đừng đăng ký quá sớm lúc Container chưa Boot xong).
Ví dụ Tạo Menu "Quản Lý Quà Tặng"
use SkillDo\Cms\Menu\AdminMenu;
// Bám vào Hook sinh Menu Quản Trị
add_action('admin_navigation', 'register_my_gift_menu');
function register_my_gift_menu() {
// Thêm Menu mẹ cấp 1.
// Lưu ý: Chỉ user có Role có khóa 'manage_gifts' mới thấy Menu này
AdminMenu::add(
'gift-manager', // ID (Slug) DUY NHẤT của menu
'Quà Tặng Khách Hàng', // Tên hiển thị
Url::admin('gifts'), // Đường dẫn URL (/admin/gifts)
[
'position' => 30, // Vị trí độ cao tĩnh (càng thấp càng đứng trên đầu)
'icon' => '<i class="fa-solid fa-gift"></i>', // Icon FontAwesome
'callback' => 'manage_gifts_cap' // Tên phân quyền hoặc callback check true/false
]
);
}
3. Quản Lý Menu Con (Sub-Menu)
Phía trong "Quà Tặng", bạn có thể cần danh sách "Tất cả Món quà" (Danh sách) và "Thêm Quà Mới" (Cấu hình). Để gộp các Sub-Menu này vào đúng menu mẹ, bạn dùng AdminMenu::addSub($parent_id, $id, $title, $url, $capabilities).